module.exports = () => {
  // 解析后台管理系统token
  return async (ctx: any, next: () => any) => {
    if (ctx.request.header.token) {
      const token = ctx.request.header.token;
      // 解码token
      try {
        const decoded = ctx.app.jwt.verify(token, ctx.app.config.jwt.admin);
        // 解码成功把用户信息注入state
        ctx.state.user = decoded.data;

      } catch (error) {
        if (error.name === 'TokenExpiredError') {
          ctx.throw(401, 'token 到期');

        } else {
          ctx.throw(402, 'token 错误');
          return;
        }
      }

      await next();
    } else {
      ctx.throw(403, 'token 必传');
      return;
    }
  };
};
